#pragma once
#include <stdio.h>
#include <stdlib.h>
#include "LinkList.h"
//逆序打印单链表
void ReversePrintLinkList(LinkNode *head);
//不允许遍历链表，在pos位置之前进行插入
void InsertFrontLinkList(LinkNode **head,LinkNode *pos,LinkListType value);
//单链表的逆置（1）
void LinkListReverse_1(LinkNode **head);
//单链表的逆置（2）
void LinkListReverse_2(LinkNode **head);
//单链表的冒泡排序
void LinkListBubbleSort(LinkNode *head);
//将两个有序链表合并为一个有序链表
LinkNode * LinkListMerge(LinkNode *head1,LinkNode *head2);
//找到倒数第k个节点
LinkNode *LinkListFindLastKNode(LinkNode *head,size_t k);
//删除倒数第k个节点
void LinkListEraseLastKNode(LinkNode **head,size_t k);
//判断链表是否带环，是的话返回1,否则就返回0
int LinkListHasCycle(LinkNode *head);
//如果链表带环，求出环的长度
size_t LinkListGetCycleSize(LinkNode *head);
//如果链表带环，求出环的出口
LinkNode *LinkListGetCycleEntry(LinkNode *head);
//两个不带环的链表判断是否相交
LinkNode *LinkListHasCrosses(LinkNode *head1,LinkNode *head2);
//两个可能带环的链表判断是否相交
int LinkListHasCrossesWithCycle(LinkNode *head1,LinkNode *head2);
